/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package gov.redhawk.ide.spd.internal.ui.editor.wizard;
import gov.redhawk.ide.codegen.ICodeGeneratorDescriptor;
import gov.redhawk.ide.codegen.IProcessor;
import gov.redhawk.ide.codegen.ImplementationSettings;
import gov.redhawk.ide.codegen.RedhawkCodegenActivator;
import gov.redhawk.ui.util.EMFEmptyStringToNullUpdateValueStrategy;
import gov.redhawk.ui.validation.EmfValidationStatusProvider;
import java.util.List;
import mil.jpeojtrs.sca.spd.Processor;
import mil.jpeojtrs.sca.spd.SpdFactory;
import mil.jpeojtrs.sca.spd.SpdPackage;
import mil.jpeojtrs.sca.spd.registry.ProcessorRegistry;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.wizard.WizardPageSupport;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
public class ProcessorWizardPage extends WizardPage {
private static final String PAGE_NAME = "processorConfigPage";
private Processor processor = SpdFactory.eINSTANCE.createProcessor();
private final EMFDataBindingContext context = new EMFDataBindingContext();
private WizardPageSupport pageSupport;
private ComposedAdapterFactory adapterFactory;
private final ImplementationSettings implSettings;
private ComboViewer comboViewer;
/**
* @param pageName
* @param title
* @param titleImage
* @since 2.0
*/
public ProcessorWizardPage(final ImplementationSettings implSettings) {
super(ProcessorWizardPage.PAGE_NAME, "New Processor", null);
this.implSettings = implSettings;
this.setDescription("Set values of new Processor.");
setPageComplete(false);
}
/**
* {@inheritDoc}
*/
@Override
public void dispose() {
super.dispose();
this.pageSupport.dispose();
this.context.dispose();
}
/**
* @return the processor
*/
public Processor getProcessor() {
return this.processor;
}
/**
* {@inheritDoc}
*/
@Override
public void createControl(final Composite parent) {
// Create an adapter factory that yields item providers.
//
this.adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
this.adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
this.adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
Label label;
final Composite client = new Composite(parent, SWT.NULL);
client.setLayout(new GridLayout(2, false));
label = new Label(client, SWT.NULL);
label.setText("Name:");
this.comboViewer = new ComboViewer(client, SWT.DROP_DOWN | SWT.BORDER);
this.comboViewer.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(1, 1).create());
this.comboViewer.setContentProvider(new ArrayContentProvider());
prepareProcessors();
this.comboViewer.setComparator(new ViewerComparator());
// Bind and validate
this.context.bindValue(WidgetProperties.text().observe(this.comboViewer.getCombo()),
EMFObservables.observeValue(this.processor, SpdPackage.Literals.PROCESSOR__NAME), new EMFEmptyStringToNullUpdateValueStrategy(), null);
this.context.addValidationStatusProvider(new EmfValidationStatusProvider(this.processor, this.context, this.adapterFactory));
this.pageSupport = WizardPageSupport.create(this, this.context);
this.setControl(client);
}
/**
* Sets the os.
*
* @param os2 the os2
*/
public void setProcessor(final Processor processor2) {
this.processor = EcoreUtil.copy(processor2);
this.setTitle("Edit Processor");
this.setDescription("Edit Processor Value");
}
/**
* @since 2.0
*/
private void prepareProcessors() {
if (this.implSettings != null) {
final ICodeGeneratorDescriptor codeGenDesc = RedhawkCodegenActivator.getCodeGeneratorsRegistry().findCodegen(this.implSettings.getGeneratorId());
final IProcessor[] processors = codeGenDesc.getProcessors();
final List<String> tempProc = ProcessorRegistry.getProcessorNames();
for (final IProcessor temp : processors) {
if (!tempProc.contains(temp.getProcessorType())) {
tempProc.add(temp.getProcessorType());
}
}
this.comboViewer.setInput(tempProc);
} else {
this.comboViewer.setInput(ProcessorRegistry.getProcessorNames());
}
}
}